home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Arsenal Files 8
/
The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO
/
pcboard
/
iemsi120.zip
/
IEMSI.PPE
(
.txt
)
< prev
next >
Wrap
PCBoard Programming Language Executable
|
1996-11-10
|
11KB
|
707 lines
ProcedureDDatePROCEDURE000
;------------------------------------------------------------------------------
; .ss.
; `²²'
; .,sS$Ss,,s$ .,sS$$$Ss. .,sS$Ss,,s$ .ss. .sSs.
; .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
; $$$' .$$$' $$$²Sçsµ²' .$$$' .$$$'.$$$' .$$$' `$$b.
; $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$' ;$$$
; `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
; .sS²°$$$²²°"' d²°'
; .$$² .$$'
; $$$.,d$$'
; `²S$$S²'
;------------------------------------------------------------------------------
; P.P.L.X. 2.OO (C)1996 - Lone Runner / AEGiS CoRP'96
;------------------------------------------------------------------------------
; PPE 3.2O (Encryption type I) - Analysis ON - Postprocessing ON
;------------------------------------------------------------------------------
Boolean BOOLEAN001
Boolean BOOLEAN002
Boolean BOOLEAN003
Boolean BOOLEAN004
Boolean BOOLEAN005
Boolean BOOLEAN006
Boolean TBOOLEAN007(4)
Date DATE001
Date DATE002
Integer INTEGER001
Integer INTEGER002
Integer INTEGER003
Integer INTEGER004
String STRING002
String STRING003
String STRING004
String STRING005
String STRING006
String STRING007
String STRING008
String STRING009
String STRING010
String STRING011
String STRING012
String STRING013
String STRING014
String STRING015
String STRING016
String STRING017
String STRING018
String STRING019
String STRING020
String STRING021
String STRING022
String STRING023
String STRING024
String STRING025
String STRING026
String STRING027
String STRING028
String STRING029
String STRING030
String STRING031
String STRING032
String STRING033
String TSTRING034(12)
String STRING035
String STRING036
String STRING037
String STRING038
String STRING039
String STRING040
String STRING041
String STRING042
String STRING043
String STRING044
String STRING045
Time TIME001
Time TIME002
Byte BYTE001
Byte BYTE002
Byte BYTE003
Byte BYTE004
Byte BYTE005
Byte BYTE006
Byte BYTE007
Byte BYTE008
Byte BYTE009
Byte BYTE010
Word WORD003
Word WORD004
Word WORD005
SByte SBYTE001
SByte SBYTE002
BigStr BIGSTR002
BigStr BIGSTR005
BigStr BIGSTR006
BigStr BIGSTR007
Declare Function FUNCTION001(BigStr BIGSTR001) BigStr
Declare Function FUNCTION002() BigStr
Declare Function FUNCTION003() String
Declare Procedure PROC001(Var Byte BYTE011)
Declare Procedure PROC002(String STRING048)
Declare Procedure PROC003(String STRING049)
Declare Procedure PROC004(Byte BYTE012)
;------------------------------------------------------------------------------
Goto LABEL001
End
;------------------------------------------------------------------------------
Function FUNCTION001(BigStr BIGSTR001) BigStr
Word WORD001
Word WORD002
String STRING001
BigStr BIGSTR003
BigStr BIGSTR004
ProcedureDDatePROCEDURE001
For WORD001 = 1 To Len(BIGSTR001)
BIGSTR004 = Right(BIGSTR001, Len(BIGSTR001) - WORD001 + 1)
WORD002 = InStr(BIGSTR004 + "\", "\") - 1
BIGSTR003 = BIGSTR003 + Left(BIGSTR004, WORD002)
WORD001 = WORD001 + WORD002
If (Mid(BIGSTR001, WORD001 + 1, 1) == "\") Then
STRING001 = "\"
Inc WORD001
Else
STRING001 = Chr(S2I(Mid(BIGSTR001, WORD001 + 1, 2), 16))
WORD001 = WORD001 + 2
Endif
BIGSTR003 = BIGSTR003 + STRING001
Next
BIGSTR003 = ReplaceStr(BIGSTR003, "{{", "{")
BIGSTR003 = ReplaceStr(BIGSTR003, "}}", "}")
BIGSTR003 = ReplaceStr(BIGSTR003, "[[", "[")
BIGSTR003 = ReplaceStr(BIGSTR003, "]]", "]")
FUNCTION001 = BIGSTR003
EndFunc
:LABEL001
BYTE006 = 0
BYTE007 = 1
BYTE008 = 2
BYTE009 = 3
BYTE010 = 4
GetToken STRING030
If (STRING030 <> "NO_ADS") Then
PrintLn "IEMSI AutoLogon v1.20 (C) 1996 and writen by Paul Miller"
PrintLn "Reality's Edge (517)347-0326, 1:159/330@fidonet.org"
Newline
Else
GetToken STRING030
Endif
If (STRING030 == "") STRING030 = "SETTINGS" + LangExt()
STRING030 = PPEPath() + STRING030
STRING008 = "IEMSI." + String(PcbNode())
BYTE004 = 8
STRING029 = Chr(13)
STRING004 = STRING029 + "**EMSI_IRQ8E08" + STRING029
STRING002 = "**EMSI_ACKA490" + STRING029
STRING003 = "**EMSI_NAKEEC3" + STRING029
STRING005 = "**EMSI_IIR61E2" + STRING029
STRING007 = "EMSI_ISI"
STRING006 = "EMSI_ICI"
INTEGER003 = S2I("FFFFFFFF", 16)
BYTE003 = FNext()
FOpen BYTE003, STRING030, 0, 0
If (Ferr(BYTE003)) PROC004(100)
FDefIn BYTE003
FDGet STRING023
FDGet STRING024
FDGet STRING025
FDGet STRING026
FDGet STRING027
FDGet STRING028
FDGet BYTE005
FDGet STRING042
FDGet STRING036
FDGet STRING037
FDGet STRING044
FDGet STRING045
FClose BYTE003
STRING022 = "{PCBoard," + String(Ver() / 100) + "." + String(Ver() % 100)
If (MaxNode() > 1) Then
STRING022 = STRING022 + "/M " + String(MaxNode()) + "}"
Else
STRING022 = STRING022 + "}"
Endif
STRING023 = "{" + STRING023 + "}"
STRING024 = "{" + STRING024 + "}"
STRING025 = "{" + STRING025 + "}"
STRING026 = "{" + STRING026 + "}"
STRING027 = "{" + STRING027 + "}"
STRING028 = "{" + STRING028 + "}"
For INTEGER004 = 4 To 0 Step -1
If (BYTE005 >= 2 ^ INTEGER004) Then
TBOOLEAN007(INTEGER004) = 1
BYTE005 = BYTE005 - 2 ^ INTEGER004
Endif
Next
If (OnLocal()) Then
BOOLEAN004 = 1
BOOLEAN002 = 1
Else
If (TBOOLEAN007(BYTE007)) BOOLEAN005 = CheckRip()
BOOLEAN004 = AnsiOn()
Endif
If (BOOLEAN005) Then
STRING038 = "RIPscrip"
STRING039 = "R"
ElseIf (BOOLEAN004) Then
STRING038 = STRING036
STRING039 = "Y"
Else
STRING038 = STRING037
STRING039 = "N"
Endif
BOOLEAN006 = 1
STRING043 = YesChar() + NoChar() + "R,; "
If (!TBOOLEAN007(BYTE009)) STRING043 = STRING043 + "S"
If (!TBOOLEAN007(BYTE008)) STRING043 = STRING043 + "Q"
BYTE002 = 1
While ((BOOLEAN002 == 0)) PROC001(BYTE002)
If (BOOLEAN001) Then
FCreate BYTE003, STRING008, 1, 0
FDefOut BYTE003
FDPutLn BIGSTR005
WORD005 = 0
BOOLEAN003 = 0
For INTEGER004 = 1 To Len(BIGSTR005)
BIGSTR006 = Right(BIGSTR005, Len(BIGSTR005) - INTEGER004 + 1)
If (BOOLEAN003 == 1) Then
WORD004 = InStr(BIGSTR006, "}")
If (Mid(BIGSTR006, WORD004 + 1, 1) <> "}") Then
TSTRING034(WORD005) = FUNCTION001(STRING033 + Left(BIGSTR006, WORD004 - 1))
FDPutLn TSTRING034(WORD005)
STRING033 = ""
Inc WORD005
BOOLEAN003 = 0
Else
STRING033 = STRING033 + Left(BIGSTR006, WORD004)
Inc INTEGER004
Endif
Else
WORD004 = InStr(BIGSTR006, "{")
BOOLEAN003 = 1
Endif
INTEGER004 = INTEGER004 + WORD004 - 1
Next
FClose BYTE003
STRING009 = TSTRING034(0)
STRING010 = TSTRING034(1)
STRING011 = TSTRING034(2)
STRING012 = TSTRING034(3)
STRING013 = TSTRING034(4)
STRING014 = TSTRING034(5)
STRING015 = TSTRING034(6)
STRING016 = TSTRING034(7)
STRING017 = TSTRING034(8)
STRING018 = TSTRING034(9)
STRING019 = TSTRING034(10)
STRING020 = TSTRING034(11)
STRING021 = TSTRING034(12)
Select Case (Upper(Left(STRING016, InStr(STRING016 + ",", ",") - 1)))
Case "AVT0"
STRING035 = "Y"
Case "ANSI"
STRING035 = "Y"
Case "VT52"
STRING035 = "N"
Case "VT100"
STRING035 = "N"
Case "TTY"
STRING035 = "N"
Case Else
STRING035 = "?"
End Select
If (InStr(STRING019, "NEWS") == 0) Then
STRING035 = STRING035 + ";NS"
Endif
If (TBOOLEAN007(BYTE010)) STRING035 = STRING035 + ";Q"
Else
If (Exist(STRING008) == 1) Delete STRING008
MPrint STRING029 + STRING005 + STRING005 + " " + STRING029
Endif
If ((BOOLEAN006 && BOOLEAN001) && (Left(STRING035, 1) <> "?")) Then
KeyFlush
KbdStuff STRING035
Goto LABEL002
Endif
If (BOOLEAN006) Then
If (BOOLEAN001) STRING040 = ""
Print STRING029 + STRING042 + STRING038 + "? " + STRING040
While (BOOLEAN006) PROC002(Inkey())
Endif
KeyFlush
KbdStuff STRING041
:LABEL002
End
;------------------------------------------------------------------------------
Procedure PROC001(Var Byte BYTE011)
Select Case (BYTE011)
Case 1
KeyFlush
BYTE001 = 0
DATE002 = Date()
TIME002 = Time()
SBYTE002 = TIME002 + 60 - Time() + (Date() - DATE002) * 86400
Inc BYTE011
Case 2
PROC003("Sending EMSI_INQ packet")
MPrint STRING004
SPrint STRING029
Print STRING042 + STRING038 + "? " + STRING040
Inc BYTE011
Case 3, 7
DATE001 = Date()
TIME001 = Time()
SBYTE001 = TIME001 + 20 - Time() + (Date() - DATE001) * 86400
Inc BYTE001
If (BYTE001 > 3) BOOLEAN002 = 1
Inc BYTE011
Case 4
PROC003("Waiting for EMSI_ICI packet (Try " + String(BYTE001) + ")")
BIGSTR006 = ""
While ((BOOLEAN002 == 0) && (BYTE011 == 4)) Do
If (STRING032 <> "") Then
If (BOOLEAN006) PROC002(STRING032)
Endif
If (STRING031 <> "") Then
If (BOOLEAN006) PROC002(STRING031)
Endif
STRING032 = KInkey()
STRING031 = MInkey()
BIGSTR006 = BIGSTR006 + Upper(STRING031)
SBYTE001 = TIME001 + 20 - Time() + (Date() - DATE001) * 86400
SBYTE002 = TIME002 + 60 - Time() + (Date() - DATE002) * 86400
If (((SBYTE002 <= 0) || (InStr(BIGSTR006, STRING005) > 0)) || (STRING032 == Chr(27))) Then
PROC003("Client does not support the IEMSI protocol")
BOOLEAN002 = 1
Continue
Endif
If (SBYTE001 <= 0) Then
BYTE011 = 2
Continue
Endif
If (Right(BIGSTR006, 10) == "**" + STRING006) Then
Inc BYTE011
Endif
EndWhile
Case 5
PROC003("Receiving EMSI_ICI packet")
BIGSTR006 = ""
INTEGER004 = 1
STRING031 = ""
While ((INTEGER004 <= 4) && (STRING031 <> STRING029)) Do
STRING031 = MInkey()
BIGSTR006 = BIGSTR006 + STRING031
Inc INTEGER004
EndWhile
Push BIGSTR006
WORD003 = S2I(BIGSTR006, 16)
BIGSTR005 = ""
INTEGER004 = 1
While ((INTEGER004 <= WORD003) && (STRING031 <> STRING029)) Do
STRING031 = MInkey()
BIGSTR005 = BIGSTR005 + STRING031
Inc INTEGER004
EndWhile
BIGSTR006 = ""
INTEGER004 = 1
While ((INTEGER004 <= 8) && (STRING031 <> STRING029)) Do
STRING031 = MInkey()
BIGSTR006 = BIGSTR006 + STRING031
Inc INTEGER004
EndWhile
INTEGER001 = S2I(BIGSTR006, 16)
Pop BIGSTR006
BIGSTR006 = BIGSTR006 + BIGSTR005
If ((InStr(BIGSTR006, STRING005) > 0) || (KInkey() == Chr(27))) Then
PROC003("Server or client aborted; inactive")
BOOLEAN002 = 1
Else
INTEGER002 = XOr(Crc32(0, STRING006 + BIGSTR006), INTEGER003)
If (INTEGER001 == INTEGER002) Then
PROC003("EMSI_ICI packet received")
MPrint "**" + FUNCTION002() + STRING029
Inc BYTE011
Else
PROC003("EMSI_ICI packet has CRC errors")
MPrint STRING003
BYTE011 = 3
Endif
Endif
Case 6
BYTE001 = 0
Inc BYTE011
Case 8
PROC003("Sending EMSI_ISI packet")
BIGSTR006 = ""
While ((BOOLEAN002 == 0) && (BYTE011 == 8)) Do
BIGSTR006 = BIGSTR006 + Upper(MInkey())
SBYTE001 = TIME001 + 20 - Time() + (Date() - DATE001) * 86400
SBYTE002 = TIME002 + 60 - Time() + (Date() - DATE002) * 86400
If (((SBYTE002 <= 0) || (InStr(BIGSTR006, STRING005) > 0)) || (KInkey() == Chr(27))) Then
BOOLEAN002 = 1
Continue
Endif
If ((SBYTE001 <= 0) || InStr(BIGSTR006, STRING003)) Then
PROC003("Got NAK!")
MPrint "**" + FUNCTION002() + STRING029
BYTE011 = 7
Continue
Endif
If (InStr(BIGSTR006, STRING002)) Then
BYTE011 = 9
Endif
EndWhile
Case 9
BOOLEAN002 = 1
BOOLEAN001 = 1
End Select
EndProc
;------------------------------------------------------------------------------
Function FUNCTION002() BigStr
BigStr BIGSTR008
String STRING046
String STRING047
BIGSTR008 = STRING022 + STRING023 + STRING024 + STRING025 + "{" + FUNCTION003() + "}" + STRING026 + STRING027 + STRING028
STRING046 = Right("0000" + I2S(Len(BIGSTR008), 16), 4)
BIGSTR008 = STRING007 + STRING046 + BIGSTR008
INTEGER001 = XOr(Crc32(0, BIGSTR008), INTEGER003)
FUNCTION002 = BIGSTR008 + Right("00000000" + I2S(INTEGER001, 16), 8)
EndFunc
;------------------------------------------------------------------------------
Function FUNCTION003() String
Integer INTEGER005
Integer INTEGER006
Int INT001
Int INT002
Int INT003
DWord DWORD001
String STRING048
INTEGER005 = Time()
INTEGER006 = Date()
INT001 = Day(INTEGER006)
INT002 = Month(INTEGER006)
INT003 = Year(INTEGER006) - 1968
If (INT003 % 4 == 0) Then
Select Case (INT002)
Case 2
INT001 = INT001 + 31
Case 3
INT001 = INT001 + 60
Case 4
INT001 = INT001 + 91
Case 5
INT001 = INT001 + 121
Case 6
INT001 = INT001 + 152
Case 7
INT001 = INT001 + 182
Case 8
INT001 = INT001 + 213
Case 9
INT001 = INT001 + 244
Case 10
INT001 = INT001 + 274
Case 11
INT001 = INT001 + 305
Case 12
INT001 = INT001 + 335
End Select
Else
Select Case (INT002)
Case 2
INT001 = INT001 + 31
Case 3
INT001 = INT001 + 59
Case 4
INT001 = INT001 + 90
Case 5
INT001 = INT001 + 120
Case 6
INT001 = INT001 + 151
Case 7
INT001 = INT001 + 181
Case 8
INT001 = INT001 + 212
Case 9
INT001 = INT001 + 243
Case 10
INT001 = INT001 + 273
Case 11
INT001 = INT001 + 304
Case 12
INT001 = INT001 + 334
Endif
End Select
DWORD001 = INT001 * 86400 + ((INT003 - 2) * 365) * 86400 + (INT003 / 4) * 86400 + INTEGER005
FUNCTION003 = Right("00000000" + I2S(DWORD001, 16), 8)
EndFunc
;------------------------------------------------------------------------------
Procedure PROC002(String STRING048)
If ((STRING048 == Chr(8)) && (Len(STRING040) > 0)) Then
Print Chr(8), " ", Chr(8)
STRING040 = Left(STRING040, Len(STRING040) - 1)
ElseIf (STRING048 == STRING029) Then
Newlines 2
BOOLEAN002 = 1
BOOLEAN006 = 0
STRING041 = STRING039 + ";"
STRING040 = Upper(STRING040)
If (InStr(STRING040, "NS")) Then
STRING040 = StripStr(STRING040, "NS")
STRING041 = STRING041 + "NS;"
PrintLn STRING044
Endif
If (InStr(STRING040, "Q")) Then
STRING041 = STRING041 + "Q;"
PrintLn STRING045
Endif
If (InStr(STRING040, NoChar())) STRING041 = STRING041 + NoChar() + ";"
If (InStr(STRING040, YesChar())) STRING041 = STRING041 + YesChar() + ";"
If (InStr(STRING040, "R")) STRING041 = STRING041 + "R;"
Else
If ((Upper(STRING048) == "H") || (STRING048 == "?")) Then
StartDisp 1
Print STRING029
DispFile PPEPath() + "HELP", 4
Print STRING042 + STRING038 + "? " + STRING040
StartDisp 2
ElseIf (Len(STRING040) <= BYTE004) Then
If (InStr(STRING043, Upper(STRING048))) Then
Print STRING048
STRING040 = STRING040 + STRING048
Endif
Endif
Endif
EndProc
;------------------------------------------------------------------------------
Procedure PROC003(String STRING049)
If (TBOOLEAN007(BYTE006) == 1) Then
SPrint "sH┌──────────────────────────────────────────────────────────────────────────────┐"
SPrint "│ IEMSI Transmission Status: " + Left(STRING049, 48) + " │"
SPrint "└──────────────────────────────────────────────────────────────────────────────┘u"
Endif
EndProc
;------------------------------------------------------------------------------
Procedure PROC004(Byte BYTE012)
FreshLine
Newline
PrintLn "@X0CExiting due to critical error #", BYTE012
Stop
EndProc
;------------------------------------------------------------------------------
;
; Usage report (before postprocessing)
;
; ■ Statements used :
;
; 2 End
; 138 Goto
; 187 Let
; 6 Print
; 5 PrintLn
; 91 If
; 1 DispFile
; 1 FCreate
; 1 FOpen
; 2 FClose
; 2 StartDisp
; 1 Delete
; 13 Inc
; 2 Newline
; 1 Newlines
; 2 GetToken
; 1 Stop
; 1 Push
; 1 Pop
; 2 KbdStuff
; 1 FreshLine
; 4 SPrint
; 5 MPrint
; 1 FDefIn
; 1 FDefOut
; 12 FDGet
; 2 FDPutLn
; 3 KeyFlush
; 4 EndProc
; 3 EndFunc
;
;
; ■ Functions used :
;
; 3 -
; 2 ^
; 10 *
; 2 /
; 2 %
; 146 +
; 26 -
; 57 ==
; 8 <>
; 3 <
; 11 <=
; 6 >
; 7 >=
; 77 !
; 14 &&
; 11 ||
; 10 Len(
; 10 Upper()
; 3 Mid()
; 11 Left()
; 6 Right()
; 1 Ferr()
; 8 Chr()
; 20 InStr()
; 9 Date()
; 9 Time()
; 1 Year()
; 1 Month()
; 1 Day()
; 2 Ver()
; 3 NoChar()
; 3 YesChar()
; 1 Inkey()
; 5 String()
; 2 PPEPath()
; 1 PcbNode()
; 1 OnLocal()
; 1 Exist()
; 3 I2S()
; 4 S2I()
; 1 LangExt()
; 1 AnsiOn()
; 2 XOr()
; 3 KInkey()
; 5 MInkey()
; 2 MaxNode()
; 4 ReplaceStr()
; 1 StripStr()
; 2 Crc32()
; 1 FNext()
; 1 CheckRip()
;
;------------------------------------------------------------------------------
;
; Analysis flags : M
;
; M - Send text to modem only ■ 4
; Some informations are sent only to the modem, not to the local
; screen, this is a well known way to make stealth backdoors, Check!
; ■ Search for : SENDMODEM, MPRINT, MPRINTLN
;
;------------------------------------------------------------------------------
;
; Postprocessing report
;
; 3 For/Next
; 5 While/EndWhile
; 32 If/Then or If/Then/Else
; 4 Select Case
;
;------------------------------------------------------------------------------
; AEGiS Corp - Break the routines, code against the machines!
;------------------------------------------------------------------------------